
#include <iostream>
#include <cstring>

// 头文件中的say方式是c实现，不能直接在cpp中使用
// 原因：c、c++方法等由于编译方式不同，编译出来的符号不同，C++就调用不到c中的函数
// extern "C" 指示编译器该代码以c的方式编译让c在c++中使用
// 可以直接在头文件中使用extern c，此处就不需要再使用
//extern "C" {
#include "_01basic.h"
//}
using namespace std;


int main21(int argc, char const *argv[]) {
    // c++输出语句
    std::cout << "hello cpp" << std::endl;

    // c与c++兼容(c中大多数语法可以直接在c++中使用)
    say(1, 2);

    // C++新增数据类型：引用类型
    int i = 10;
    int &j = i;//int&引用类型，类似指针，j表示10的内存地址

    // 字符串
    // c的字符串就是以NULL、\0结尾的字符数组
    char cstr1[] = {'h', 'i', '\0'};
    char const *cstr2 = "hello";// 默认会在结尾添加\0
    cout << "s1" << cstr1 << endl;
    cout << "s2" << cstr2 << endl;
    char cstr3[10];
    // 标准库的字符串操作,复制
    strcpy(cstr3, cstr2);
    cout << "s3" << cstr3 << endl;

    // C++的String类 头文件<string>中
    string name = "fauks";
    // 构造方法
    string s2(name);
    string s3("slx");
    string *s4 = new string("hello");
    // 使用指针就不能直接使用.调用方法，需要使用箭头符号
    // 使用指针传递参数比直接传递字符串 字面量效率高
    s4->append("world");

    // 使用new之后需要delete释放内存，new是申请内存
    // new申请的数组=delete[]
    // new=delete
    // malloc=free
    delete s4;

    string desc = "shandong";
    desc.append("qingdao");
    // 将c++的string转成c的字符串 c_str()
    cout << desc.c_str() << endl;

    return 0;
}
